const { userModel } = require('../../models/users')

const { setToken, getToken } = require('../../utils/jwt')


module.exports = class User {
  // 添加新的用户信息
  static async addUser(ctx) {
    let { username, password, phone, email, profile, auth } = ctx.request.body;

    // 是否有必填项未填
    if (!((username || phone || email) && password)) {
      ctx.body = { status: 300, msg: '有未填项' }
      return;
    }

    // 判断是用什么注册的
    let ico = username ? ['username', '账号', username] : phone ? ['phone', '手机号', phone] : email ? ['email', '邮箱', email] : '';

    // 判断账号是否存在
    let bool = await userModel.find({ [ico[0]]: ico[2] });
    if (bool.length) {
      ctx.body = { status: 202, msg: ico[1] + '已被注册' }
      return;
    }

    // 设置算法 - MD5加密方式-在前端做了
    // let hash = crypto.createHash('md5');
    // // 设置加密数据
    // hash.update('mh//' + password)
    // // 输出加密结果
    // let passMd5 = hash.digest("hex")

    // 添加用户信息
    let data = await userModel.insertMany({ username, password, phone, email, profile, auth })
    if (data.length) ctx.body = { status: 200, msg: '添加成功', data }
    else ctx.body = { status: 400, msg: '添加失败' }
  }
  // 用户登录
  static async loginUser(ctx) {
    let { username, password, phone, email } = ctx.request.body;

    // 是否有必填项未填
    if (!((username || phone || email) && password)) {
      ctx.body = { status: 300, msg: '有未填项' }
      return;
    }

    // 判断是用什么注册的
    let ico = username ? ['username', '账号', username] : phone ? ['phone', '手机号', phone] : email ? ['email', '邮箱', email] : '';

    // 获取用户信息
    let data = await userModel.find({ [ico[0]]: ico[2] });

    // 没有注册
    if (!data.length) {
      ctx.body = { status: 202, msg: ico[1] + '未注册' }
      return;
    }
    // 密码不正确
    if (password !== data[0].password) {
      ctx.body = { status: 204, msg: ico[1] + '或密码错误' }
      return;
    }

    // token令牌加密 用户id
    let token = setToken(data[0]._id);
    // console.log(getToken(token));
    // 密码正确
    ctx.body = { status: 200, msg: '登录成功', data: { token } }
  }
}